package com.wenjiang.service.impl;

import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wenjiang.common.dto.AdminLoginParam;
import com.wenjiang.common.lang.Result;
import com.wenjiang.common.util.JWTUtil;
import com.wenjiang.common.util.Md5Utils;
import com.wenjiang.common.vo.AdminLoginSuccess;
import com.wenjiang.common.vo.AdminLoginVo;
import com.wenjiang.entity.MallAdmin;
import com.wenjiang.entity.MallMenu;
import com.wenjiang.entity.MallMenuMeta;
import com.wenjiang.entity.MallRole;
import com.wenjiang.mapper.MallAdminMapper;
import com.wenjiang.mapper.MallMenuMapper;
import com.wenjiang.mapper.MallRoleMapper;
import com.wenjiang.service.LoginService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class LoginServiceImpl  extends ServiceImpl<MallAdminMapper, MallAdmin> implements LoginService {


   @Autowired
   MallMenuMapper mallMenuMapper;

   @Autowired
    MallRoleMapper mallRoleMapper;


    @Override
    public Result adminLogin(AdminLoginParam adminLoginParam) {

        //根据名称查询用户名
        QueryWrapper<MallAdmin>  mallAdminQueryWrapper= new QueryWrapper<>();
        MallAdmin admin = baseMapper.selectOne(mallAdminQueryWrapper.eq("user_name", adminLoginParam.getUsername()));

        if (admin==null){
         return  Result.fail("用户名不存在");
        }

        if (!admin.getPassword().equals(Md5Utils.MD5Encode(adminLoginParam.getPassword()))){
            return Result.fail("用户名或密码错误");
        }

        //查询对应的权限



        //生成jwt
        String token = JWTUtil.createToken(admin.getUserId());

        AdminLoginSuccess adminLoginSuccess = new AdminLoginSuccess();

        adminLoginSuccess.setToken(token);

        return Result.succ(adminLoginSuccess,"登陆成功");
    }

    @Override
    public Result getInfo(Long userId) {

        //根据id查询 用户信息
        MallAdmin admin = baseMapper.selectById(userId);

        AdminLoginVo adminLoginVo = new AdminLoginVo();

        BeanUtil.copyProperties(admin, adminLoginVo);


        List<String> roles =new ArrayList<>();
        //查询用户的角色
        List<MallRole> adminRoles = mallRoleMapper.getRoleByuserId(userId);
        //加入角色标识符
        for(MallRole role :adminRoles){
            roles.add(role.getRoleKey());
        }

        adminLoginVo.setRoles(roles);

        return Result.succ( adminLoginVo, "");
    }


    @Override
    public Result getRouters() {

//        ArrayList<MallMenu> mallMenus = new ArrayList<>();
//
//        //children
//        ArrayList<MallMenu> childrens= new ArrayList<>();
//
//        //空字符串
//        ArrayList<MallMenu> NUll= new ArrayList<>();
//
//        //先创造假数据
//        List<String> roles = new ArrayList<>();
//        roles.add("admin");
//        MallMenuMeta mallMenuMeta= new MallMenuMeta();
//        MallMenuMeta childrenMenuMeta= new  MallMenuMeta();
//        mallMenuMeta.setRoles(roles);
//        mallMenuMeta.setTitle("父路由");
//
//        MallMenu mallMenu =new MallMenu();
//        mallMenu.setMeta(mallMenuMeta);
//        //父路由设为layout
//        mallMenu.setComponent("layout");
////        mallMenu.setAlwaysShow(Short.valueOf("1"));
//        mallMenu.setName("test1");
//        mallMenu.setPath("/test1");
//
//
//        MallMenu children = new MallMenu();
//        BeanUtil.copyProperties(mallMenu, children);
//
//
//        children.setName("test");
//        children.setComponent("test");
//        children.setChildren(NUll);
////        children.setAlwaysShow(new Short("0"));
//        children.setPath("test");
//        BeanUtil.copyProperties(mallMenuMeta, childrenMenuMeta);
//
//        childrenMenuMeta.setTitle("子路由1");
//        children.setMeta(childrenMenuMeta);
//
//        MallMenu children2= new MallMenu();
//        BeanUtil.copyProperties(children, children2);
//        children2.setName("test2");
//        children2.setPath("test2");
//        //测试是否显示
//        children2.setHidden(true);
//
//
//        childrens.add(children);
//        childrens.add(children2);
//
//        mallMenu.setChildren(childrens);
//
//
//        mallMenus.add(mallMenu);



        // 数据库版
        List<MallMenu> allMenu = mallMenuMapper.getAllMenu();


        return Result.succ(allMenu, "获取路由成功");
    }
}
